package com.woniuxy.sddfp.system.listener;

//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.woniuxy.sddfp.common.model.dto.bank.BankCardRequestDto;
//import com.woniuxy.sddfp.system.entity.UserCard;
//import com.woniuxy.sddfp.system.entity.UserDetail;
//import com.woniuxy.sddfp.system.service.IUserCardService;
//import com.woniuxy.sddfp.system.service.IUserDetailService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.messaging.handler.annotation.Payload;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.concurrent.CompletableFuture;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Future;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * @author yellow Doctor
 * @date 2025-06-25
 * @desc 蜗牛创想：www.woniuxy.com
 */
@Slf4j
@Component
public class BindCardListener {
//
//    @Autowired
//    private IUserDetailService userDetailService;
//
//    @Autowired
//    private IUserCardService userCardService;

    /**
    /**        前端数据  @RequestBody   对象
                          @Payload
     *   json 字符串  =================》 不能转成对象  BankCardRequestDto
                                  *
     * @param bankCardRequestDto
     * sddfp-queue-bind
     */
//    @RabbitListener(queues = "sddfp-queue-bind")
//    public void handlerMsg(@Payload BankCardRequestDto bankCardRequestDto){
//
//        //01  根据请求流水号，更新用户表u_user_detail中绑卡状态  CARD_BIND_STATUS
//        //这个是一个独立的任务
//
//
//        //线程1 执行的任务
//        new Thread(()->{
//
//            String reqCode = bankCardRequestDto.getReqCode();
//            userDetailService.update(
//                    Wrappers.lambdaUpdate(UserDetail.class)
//                            .set(UserDetail::isCardBindStatus,1)
//                            .eq(UserDetail::getReqCode,reqCode)
//            );
//
//        }).start();
//
//
//        //02  修改u_user_card绑卡记录表中信息 BANK_TITLE、BANK_NO
//        //这个是一个独立的任务
//        new Thread(()->{
//
//            UserDetail userDetail = userDetailService.getOne(Wrappers.lambdaQuery(UserDetail.class)
//                    .eq(UserDetail::getReqCode, bankCardRequestDto.getUserCode()));
//            Long userId = userDetail.getId();
//
//            userCardService.update(
//                    Wrappers.lambdaUpdate(UserCard.class)
//                            .set(UserCard::getBankNo,bankCardRequestDto.getBankNo())
//                            .set(UserCard::getBankTitle,bankCardRequestDto.getBankTitle())
//                            .eq(UserCard::getUserId,userId)
//
//            );
//
//        }).start();
//    }

    // 注入线程池（推荐定义为 Bean）
//    @Resource
//    private ExecutorService executorService;
//
//    public void asyncUpdateBankCard(BankCardRequestDto bankCardRequestDto) {
//        String reqCode = bankCardRequestDto.getReqCode();
//        String userCode = bankCardRequestDto.getUserCode(); // 注意是否是 bankCardRequestDto.getReqCode()？
//
//        // 【任务1】：更新用户绑卡状态
//        Future<?> future1 = executorService.submit(() -> {
//            try {
//                userDetailService.update(
//                        Wrappers.lambdaUpdate(UserDetail.class)
//                                .set(UserDetail::isCardBindStatus, 1)
//                                .eq(UserDetail::getReqCode, reqCode)
//                );
//                log.info("【任务1】绑卡状态更新完成，reqCode: {}", reqCode);
//            } catch (Exception e) {
//                log.error("【任务1】更新失败", e);
//            }
//        });
//
//        // 【任务2】：等待任务1完成后执行，用于更新银行卡信息
//        executorService.submit(() -> {
//            try {
//                // 等待任务1完成（可选）
//                future1.get(); // 阻塞直到任务1完成
//
//                UserDetail userDetail = userDetailService.getOne(Wrappers.lambdaQuery(UserDetail.class)
//                        .eq(UserDetail::getReqCode, userCode));
//
//                if (userDetail == null) {
//                    log.warn("未找到用户详情，userCode: {}", userCode);
//                    return;
//                }
//
//                Long userId = userDetail.getId();
//
//                userCardService.update(
//                        Wrappers.lambdaUpdate(UserCard.class)
//                                .set(UserCard::getBankNo, bankCardRequestDto.getBankNo())
//                                .set(UserCard::getBankTitle, bankCardRequestDto.getBankTitle())
//                                .eq(UserCard::getUserId, userId)
//                );
//                log.info("【任务2】银行卡信息更新完成，userId: {}", userId);
//            } catch (Exception e) {
//                log.error("【任务2】更新失败", e);
//            }
//        });
//
////        CompletableFuture  操作多线程
//    }
//
//    //CompletableFuture 进行多线程操作
//    public void asyncUpdateBankCardWithCompletableFuture(BankCardRequestDto bankCardRequestDto) {
//
//        String reqCode = bankCardRequestDto.getReqCode();
//        String userCode = bankCardRequestDto.getUserCode();
//
//        // 【任务1】更新绑卡状态
//        CompletableFuture<Void> updateBindStatusFuture = CompletableFuture.runAsync(() -> {
//            try {
//                userDetailService.update(
//                        Wrappers.lambdaUpdate(UserDetail.class)
//                                .set(UserDetail::isCardBindStatus, 1)
//                                .eq(UserDetail::getReqCode, reqCode)
//                );
//                log.info("【任务1】绑卡状态更新完成，reqCode: {}", reqCode);
//            } catch (Exception e) {
//                log.error("【任务1】绑卡状态更新失败", e);
//                throw new RuntimeException("更新绑卡状态失败", e);
//            }
//        }, executor); // 使用线程池
//
//        // 【任务2】依赖于任务1完成后执行：更新银行卡信息
//        updateBindStatusFuture.thenRunAsync(() -> {
//            try {
//                // 查询用户信息
//                UserDetail userDetail = userDetailService.getOne(Wrappers.lambdaQuery(UserDetail.class)
//                        .eq(UserDetail::getReqCode, userCode));
//
//                if (userDetail == null) {
//                    log.warn("未找到用户详情，userCode: {}", userCode);
//                    return;
//                }
//
//                Long userId = userDetail.getId();
//
//                // 更新银行卡信息
//                userCardService.update(
//                        Wrappers.lambdaUpdate(UserCard.class)
//                                .set(UserCard::getBankNo, bankCardRequestDto.getBankNo())
//                                .set(UserCard::getBankTitle, bankCardRequestDto.getBankTitle())
//                                .eq(UserCard::getUserId, userId)
//                );
//
//                log.info("【任务2】银行卡信息更新完成，userId: {}", userId);
//
//            } catch (Exception e) {
//                log.error("【任务2】银行卡信息更新失败", e);
//            }
//        }, executor);
//
//        // 可选：添加异常处理
//        updateBindStatusFuture.exceptionally(ex -> {
//            log.error("整个流程因异常中断", ex);
//            return null;
//        });
//    }

}
